package Motor;
import java.io.*;

import javax.microedition.lcdui.*;
import javax.microedition.rms.RecordStore;


public class Hero extends Carta{ 
	
	private float atk;
	private int dmg;
	private int hlt;
	private Habilidad equipo=null;
	
	Hero(int id, int t, Image i,Image i2,
			int d, float a, int h) {
		this.setTipoCarta(0);
		this.setId(id);
		this.setTipo(t);
		this.setImagen(i);
		this.setIcono(i2);
		this.setDmg(d);
		this.setAtk(a);
		this.setHlt(h);
		setEquipo(null);
	}
	
	public void setHabilidad0(Habilidad h){
		setEquipo(h);
	}
	
	Hero copiar(Hero h){
		Hero aux=null;
		if (this!=null){
			aux=new Hero(h.getId(),h.getTipo(),h.getImagen(),h.getIcono(),
				h.getDmg(),h.getAtk(),h.getHlt());
			aux.setEquipo((Habilidad) h.getEquipo().copiar());
		}
		return aux;
	}
	
	void calcularAtkt(int p){
		this.setAtk(this.getAtk()*(p+1));
	}
	
	static int resolverGanador(Hero myHero, Hero uHero){
		// En caso de empate no devuelve nada
		int i=1;
		if (myHero.getAtk()>=uHero.getAtk()){
			i=0;
		}
		return i;
	}
	
	void pegar(Hero h){
		h.setHlt(h.getHlt()-this.getDmg());
	}
	
	boolean muerto(){
		return getHlt()==0;
	}
	
	void almacenar(RecordStore rs){
		byte[] registro,imag;
		ByteArrayOutputStream baos;
		DataOutputStream dos;
		try{
			baos = new ByteArrayOutputStream();
			dos = new DataOutputStream(baos);
			System.out.println("Escribo tc");
			dos.writeInt(getTipoCarta());
			System.out.println("Escribo id"+getId());
			dos.writeInt(getId());
			System.out.println("Escribo tipo");
			dos.writeInt(getTipo());
			System.out.println("Escribo dmg");
			dos.writeInt(getDmg());
			System.out.println("Escribo atk");
			dos.writeFloat(getAtk());
			System.out.println("Escribo hlt");
			dos.writeInt(getHlt());
			imag=Carta.getByteArray(getImagen());
			System.out.println("Escribo imagen");
			dos.writeInt(imag.length);			
			dos.write(imag, 0, imag.length);
			imag=Carta.getByteArray(getIcono());
			System.out.println("Escribo ico");
			dos.writeInt(imag.length);			
			dos.write(imag, 0, imag.length);
			dos.flush();
			System.out.println("copio baos a registro");
			registro = baos.toByteArray();
			System.out.println("a�ado registro");
			rs.addRecord(registro,0,registro.length);
			System.out.println("cierro baos");
			baos.close();
			System.out.println("Escribo dos");
			dos.close();
			System.out.println("termino grabado");
		}
		catch (Exception e){
			System.out.println("Error al insertar registro hero");
			e.printStackTrace();
		}
	}
	
	Carta cargar(RecordStore rs,int i){
		Hero h=null;
		Image ima,ico;
		int size;
		byte[] r;
		ByteArrayInputStream bais;
		DataInputStream dis;
		byte[] registro = new byte[40000];
		try{
			bais = new ByteArrayInputStream(registro);
			dis = new DataInputStream(bais);
			rs.getRecord(i,registro,0);
			//leo los datos principales
			int tc=dis.readInt();
			int id=dis.readInt();
			int tipo=dis.readInt();
			int dmg=dis.readInt();
			float atk=dis.readFloat();
			int hlt=dis.readInt();
			//leo la imagen
			size=dis.readInt();
			r=new byte[size];
			dis.read(r, 0, size);
			ima=Image.createImage(r, 0, size);
			//leo el icono
			size=dis.readInt();
			r=new byte[size];
			dis.read(r, 0, size);
			ico=Image.createImage(r, 0, size);
			bais.close();
			dis.close();
			h=new Hero(id,tipo,ima,ico,dmg,atk,hlt);
		}
		catch (Exception e){
			System.out.println("Error al leer los registros");
		}
		registro = null;
		return h;
	}

	public int getDmg() {
		return dmg;
	}

	public void setDmg(int dmg) {
		this.dmg = dmg;
	}

	public float getAtk() {
		return atk;
	}

	public void setAtk(float atk) {
		this.atk = atk;
	}

	public int getHlt() {
		return hlt;
	}

	public void setHlt(int hlt) {
		this.hlt = hlt;
	}

	public Habilidad getEquipo() {
		return equipo;
	}

	public void setEquipo(Habilidad equipo) {
		this.equipo = equipo;
	}

	public Carta copiar() {		
		Hero h= new Hero(this.getId(), this.getTipo(),
				this.getImagen(), this.getIcono(),
				dmg,  atk,  hlt);
		if (equipo==null){
			h.equipo=null;
		}else{
			h.setEquipo((Habilidad) equipo.copiar());
		}
		return h;
	}
}
